#pragma once

#include "iostream"
#include "vector"
#include "algorithm"
#include "TypeDefin.h"
#include "queue"

using namespace std;

/*HJJ QQ479287006
给定一个二叉树，找出其最大深度。

二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。

说明: 叶子节点是指没有子节点的节点。

示例：
给定二叉树 [3,9,20,null,null,15,7]，

    3
   / \
  9  20
    /  \
   15   7
返回它的最大深度 3 。

来源：力扣（LeetCode）
链接：https://leetcode.cn/problems/maximum-depth-of-binary-tree
著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 * */

//TODO 建议自己写一下那个 求深度的回溯那种阿布
int maxDepth(TreeNode *root) {
    if (!root)
        return 0;
    int lef = maxDepth(root->left);
    int rig = maxDepth(root->right);

    if (lef > rig)
        return lef + 1;
    return rig + 1;
}

int maxDepth1(TreeNode *root) {
    if (root == NULL) return 0;
    queue<TreeNode *> q;
    q.push(root);
    int len = 0;
    while (!q.empty()) {

        int size = q.size();//获取一层的数量f
        len++;
        for (int i = 0; i < size; ++i) {
            TreeNode *t = q.front();
            q.pop();

            if (t->left)
                q.push(t->left);

            if (t->right)
                q.push(t->right);
        }

    }

    return len;

}